tg-me.com/cppproglib/5689
Create:
Last Update:
Last Update:
Устали от споров «что лучше передать: вектор, массив или указатель с длиной»? C++20 предлагает элегантное решение!
#include <span>
#include <vector>
#include <array>
// ✅ Функция работает с ЛЮБЫМ непрерывным контейнером!
void processData(std::span<const int> data) {
for (const auto& item : data) {
// Обработка
}
}
int main() {
// Работает с std::vector
std::vector<int> vec = {1, 2, 3, 4, 5};
processData(vec);
// Работает с std::array
std::array<int, 3> arr = {10, 20, 30};
processData(arr);
// Работает с C-массивами
int classic[] = {100, 200, 300};
processData(classic);
// Работает с подпоследовательностями!
processData(std::span(vec).subspan(1, 3)); // Только элементы 2,3,4
}
- Не владеет данными (zero overhead)
- Безопасно передает подпоследовательности
- Унифицированный интерфейс для всех контейнеров
- Выразительный код без шаблонных параметров
Библиотека C/C++ разработчика #буст